#include <stdio.h>
#include <stdlib.h>

#define MAXSIZE 100

typedef char datatype;

typedef struct seq_node
{
  datatype data[MAXSIZE];
  int length;
} SeqList;

SeqList* init_list()
{
  SeqList *L;
  L = (SeqList *)malloc(sizeof(SeqList));
  L->length = 0;
  return L;
}

int Insert_SeqList(SeqList *L, int i, datatype e) 
{
  if (L->length == MAXSIZE) {
    printf("顺序表已满，不能插入！\n");
    return 0;
  }
  if (i < 1 || i > L->length + 1) {
    printf("插入位置不合法！\n");
    return 0;
  }
  for (int j = L->length; j >= i; j--) {
    L->data[j] = L->data[j - 1];
  }
  L->data[i - 1] = e;
  L->length++;
  return 1;
}

// 顺序表删除
int Delete_SeqList(SeqList *L, int i) 
{
  if (i < 1 || i > L->length) {
    printf("删除位置无效！\n");
    return 0;
  }
  for (int j = i; j < L->length; j++) {
    L->data[j - 1] = L->data[j];
  }
  L->length--;
  return 1;
}

// 按值查找
int Locate_SeqList(SeqList *L, datatype x) 
{
  int i = 0;
  while (i < L->length && L->data[i] != x) {
    i++;
  }
  if (i >= L->length) {
    return -1;// 没有查找到目标元素
  }
  return i; // 查找到目标元素，返回其位置下标
}

// 取表中元素
datatype Get_SeqList(SeqList *L, int i) 
{
  if (i < 1 || i > L->length) {
    printf("没有第%d个元素！\n", i);
    return -1;
  }
  return L->data[i - 1];
}



// 编写 main 函数，并调用init_list
int main()
{
  SeqList *L;
  L = init_list();
  printf("初始化顺序表成功！Init Success\n");
  Insert_SeqList(L, 1, 'a');
  Insert_SeqList(L, 2, 'b');  
  char x = Get_SeqList(L, 1);
  printf("First el is : %c\n", x);

  free(L);
  return 0;
}
